package leetcode.problems;

/**
 * _0408 Move Zeroes
 *  移动零点
 * Created by gmwang on 2018/3/23
 */
public class _0408MoveZeroes {
    /**
     *   Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

     For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

         Note:
         You must do this in-place without making a copy of the array.
         Minimize the total number of operations.
     给定一个数组nums，写一个函数将所有0的移动到它的末尾，同时保持非零元素的相对顺序。
     例如，nums = [0, 1, 0, 3, 12]在调用你的函数之后，nums应该是[1, 3, 12, 0, 0]。
         注意：
         您必须在不做数组副本的情况下在原地进行此操作。
         尽量减少操作总数。
     */
    /**
     * 思路：
     * 1. 如果可以创建新的数组副本,list可以。
     * 不是0就正常追加，是0，就在末尾追加。
     *
     * 2. 这里要求不创建副本，原有元素如果是0，
     * 就将这个元素之后的元素前移一位，将最后一位置0。
     *
     * 3.需要注意的是，当元素后移的时候，游标+1,需要将游标-1再继续。
     * 否则连续两个0的话，就无法处理了。
     *
     * @param
     * @return
     */
    public static void moveZeroes(int[] nums) {
        for(int i = 0,m =0;i <nums.length;i ++,m++){
            if(nums[i] == 0){
                for(int j = i;j<nums.length-1;j++){
                    nums[j] = nums[j+1];
                }
                nums[nums.length - 1] = 0;
                i --;
            }
            if(m == nums.length - 1) break;
        }
    }
    public static void main(String[] args) {
//        int[] nums = {0, 1, 0, 3, 12};
        int[] nums = {0, 0,1};
        moveZeroes(nums);
        for(int i = 0;i <nums.length;i ++){
            System.out.println(nums[i]);
        }
    }
}
